package com.atguigu.day17.list03;

import org.junit.Test;

import java.util.ArrayList;
import java.util.List;

/*
Collection: 集合的顶级接口
    -- List
       -- ArrayList
Collection集合的遍历:
      1.迭代器遍历
      2.增强for遍历(底层是迭代器)
           for(集合元素类型 变量名:集合名){
               变量名:集合内的一个个元素
           }
    注意:
      1. 为什么集合对象可以使用迭代器遍历(增强for)
            因为集合对象是  Iterable接口的孩子
      2. 遍历时通过集合对象增删元素 [可能]发生 并发修改异常
          modCount: 记录对集合修改的次数 增加/删除 都会导致 modCount++
      3.使用迭代器对象删除元素 不会发生并发修改异常

List接口:
    对比Collection新增了根据下标操作元素的方法:
 */
public class ListTest {

    @Test
    public void test01() {
        List<String> list = new ArrayList<>();

        list.add("杨幂");
        list.add("赵丽颖");
        list.add("李冰冰");
        list.add("王冰冰");
        System.out.println("list = " + list);//[杨幂, 赵丽颖, 李冰冰, 王冰冰]
        //向指定的位置新增数据
        list.add(2, "李白");
        System.out.println("list = " + list);//[杨幂, 赵丽颖, 李白, 李冰冰, 王冰冰]

        List<String> newList = new ArrayList<>();
        newList.add("王冰冰");
        newList.add("赵四");
        //向指定位置新增集合
        list.addAll(0, newList);
        System.out.println("list = " + list);//[王冰冰, 赵四, 杨幂, 赵丽颖, 李白, 李冰冰, 王冰冰]

        //删除数据
        list.remove(3);
        System.out.println("list = " + list);

        //修改数据
        list.set(0, "安琪拉");
        System.out.println("list = " + list);// [安琪拉, 赵四, 杨幂, 李白, 李冰冰, 王冰冰]

        //查询
        String s = list.get(0);
        System.out.println("s = " + s);//安琪拉
        //指定元素第一次出现的下标
        int index = list.indexOf("赵四666");
        System.out.println("index = " + index);

        //指定元素最后一次出现的下标
        int lastIndexOf = list.lastIndexOf("李白");
        System.out.println("lastIndexOf = " + lastIndexOf);


    }

    @Test
    public void test02() {
        List<String> list = new ArrayList<>();

        list.add("张三");
        list.add("李四");
        list.add("王五");
        list.add("赵六");
        list.add("陈一");
        //截取集合
        List<String> subList = list.subList(0, 4);
        System.out.println("subList = " + subList);

        System.out.println("subList.size() = " + subList.size());
    }
}
